Virtualization refers to the execution of a virtual machine by physical hardware and then running operating systems and/or applications virtually on the virtual machine. The virtual machine may represent a least common denominator of hardware functionality or may represent a well-known configuration for which it is easy to prepare an operating system and applications. Many data centers use virtualization to be able to easily move a virtual machine to new physical hardware as resource requirements increase, for maintenance cycles, and to balance physical server loads. Virtualization is useful for many situations, but can also impose limitations that occur due to many virtual machines contending for the same resources (e.g., central processing unit (CPU), memory, and network interface card (NIC)).
Application virtualization provides a virtual machine at the level of a single application. For example, a host operating system may natively run some applications, while providing a virtual environment for running others. This may allow the operating system, for example, to run applications designed for a different operating system. Application virtualization blurs the distinction for the user between applications running natively in the host operating system and applications running in a virtual machine. For example, both types of applications may appear side by side in a taskbar or menu provides by the operating system shell. MICROSOFT Application Virtualization (App-V), for example, transforms applications into centrally managed virtual services that are not installed and do not conflict with other applications. In a physical environment, every application depends on its operating system (OS) for a range of services, including memory allocation, device drivers, and much more. Incompatibility between an application and its OS can be addressed by either server virtualization or presentation virtualization—but for incompatibility between two applications installed on the same instance of an OS is solved by application virtualization.
Operating systems need to have their behaviors modified to fit the needs of customers. For example, the user may install MICROSOFT Word, which registers a file type association. This file type association changes how the operating system behaves. When the user clicks on a document with the Word file type association, the operating system invokes MICROSOFT Word. File type associations are a specific example of an operating system extension point. One part of virtualization is isolation, meaning one application cannot see another application and that one application's actions do not affect the operating system, or only affect the operating system through a proxy. In the file type association case, one example of a proxy is the MICROSOFT App-V client that detects and registers the file type association as a proxy on behalf of the application. In this way, MICROSOFT App-V is aware of the operating system modification and can reverse it when the virtualized application is removed.
Unfortunately, building a custom proxy for each operating system extension point is not practical or scalable. There are over 3000 extension points in MICROSOFT WINDOWS, making it virtually impossible to write a proxy for each one. Moreover, with support for each new operating system, additional extension points need to be detected and managed to keep application virtualization working as expected. The constantly expanding number of extension points consumes development and testing time and takes time away from other new features.